home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / globals.h next >
C/C++ Source or Header  |  2005-03-14  |  5KB  |  213 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   globals.h - it contains program settings and the program capabilities 
  5.               like number of parts, of effects
  6.   Copyright (C) 2002-2005 Nasca Octavian Paul
  7.   Author: Nasca Octavian Paul
  8.  
  9.   This program is free software; you can redistribute it and/or modify
  10.   it under the terms of version 2 of the GNU General Public License 
  11.   as published by the Free Software Foundation.
  12.  
  13.   This program is distributed in the hope that it will be useful,
  14.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.   GNU General Public License (version 2) for more details.
  17.  
  18.   You should have received a copy of the GNU General Public License (version 2)
  19.   along with this program; if not, write to the Free Software Foundation,
  20.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  21.  
  22. */
  23.  
  24.  
  25. #ifndef GLOBALS_H
  26. #define GLOBALS_H
  27.  
  28. //What float type I use for internal sampledata
  29. #define REALTYPE float
  30.  
  31. struct FFTFREQS{
  32.     REALTYPE *s,*c;//sine and cosine components
  33. };
  34.  
  35. extern void newFFTFREQS(FFTFREQS *f,int size);
  36. extern void deleteFFTFREQS(FFTFREQS *f);
  37.  
  38. // Sampling rate
  39. extern int SAMPLE_RATE;
  40.  
  41. /* 
  42.  * The size of a sound buffer (or the granularity)
  43.  * All internal transfer of sound data use buffer of this size
  44.  * All parameters are constant during this period of time, exception
  45.  * some parameters(like amplitudes) which are linear interpolated.
  46.  * If you increase this you'll ecounter big latencies, but if you 
  47.  * decrease this the CPU requirements gets high.
  48.  */
  49. extern int SOUND_BUFFER_SIZE;
  50.  
  51.  
  52. /*
  53.  * The size of ADnote Oscillator
  54.  * Decrease this => poor quality
  55.  * Increase this => CPU requirements gets high (only at start of the note)
  56.  */
  57. extern int OSCIL_SIZE;
  58.  
  59. /*
  60.  * The number of harmonics of additive synth
  61.  * This must be smaller than OSCIL_SIZE/2
  62.  */
  63. #define MAX_AD_HARMONICS 128
  64.  
  65.  
  66. /*
  67.  * The number of harmonics of substractive
  68.  */
  69. #define MAX_SUB_HARMONICS 64
  70.  
  71.  
  72. /*
  73.  * The maximum number of samples that are used for 1 PADsynth instrument(or item)
  74.  */
  75. #define PAD_MAX_SAMPLES 64
  76.  
  77.  
  78. /*
  79.  * Number of parts
  80.  */
  81. #define NUM_MIDI_PARTS 16
  82.  
  83. /*
  84.  * Number of Midi channes
  85.  */
  86. #define NUM_MIDI_CHANNELS 16
  87.  
  88. /*
  89.  * The number of voices of additive synth for a single note
  90.  */
  91. #define NUM_VOICES 8
  92.  
  93. /*
  94.  * The poliphony (notes)
  95.  */
  96. #define POLIPHONY 60
  97.  
  98. /*
  99.  * Number of system effects
  100.  */
  101. #define NUM_SYS_EFX 4
  102.  
  103.  
  104. /*
  105.  * Number of insertion effects
  106.  */
  107. #define NUM_INS_EFX 8
  108.  
  109. /*
  110.  * Number of part's insertion effects 
  111.  */
  112. #define NUM_PART_EFX 3
  113.  
  114. /*
  115.  * Maximum number of the instrument on a part
  116.  */
  117. #define NUM_KIT_ITEMS 16
  118.  
  119.  
  120. /*
  121.  * How is applied the velocity sensing
  122.  */
  123. #define VELOCITY_MAX_SCALE 8.0
  124.  
  125. /*
  126.  * The maximum length of instrument's name
  127.  */
  128. #define PART_MAX_NAME_LEN 30
  129.  
  130. /*
  131.  * The maximum number of bands of the equaliser
  132.  */
  133. #define MAX_EQ_BANDS 8
  134. #if (MAX_EQ_BANDS>=20)
  135. #error "Too many EQ bands in globals.h"
  136. #endif
  137.  
  138.  
  139. /*
  140.  * Maximum filter stages
  141.  */
  142. #define MAX_FILTER_STAGES 5
  143.  
  144. /*
  145.  * Formant filter (FF) limits 
  146.  */
  147. #define FF_MAX_VOWELS 6
  148. #define FF_MAX_FORMANTS 12
  149. #define FF_MAX_SEQUENCE 8
  150.  
  151. #define LOG_2 0.693147181
  152. #define PI 3.1415926536
  153. #define LOG_10 2.302585093
  154.  
  155. /*
  156.  * The threshold for the amplitude interpolation used if the amplitude
  157.  * is changed (by LFO's or Envelope's). If the change of the amplitude
  158.  * is below this, the amplitude is not interpolated
  159.  */
  160. #define AMPLITUDE_INTERPOLATION_THRESHOLD 0.0001
  161.  
  162. /*
  163.  * How the amplitude threshold is computed
  164.  */
  165. #define ABOVE_AMPLITUDE_THRESHOLD(a,b) ( ( 2.0*fabs( (b) - (a) ) /  \
  166.       ( fabs( (b) + (a) + 0.0000000001) ) ) > AMPLITUDE_INTERPOLATION_THRESHOLD )
  167.  
  168. /*
  169.  * Interpolate Amplitude
  170.  */
  171. #define INTERPOLATE_AMPLITUDE(a,b,x,size) ( (a) + \
  172.       ( (b) - (a) ) * (REALTYPE)(x) / (REALTYPE) (size) )
  173.  
  174.  
  175. /*
  176.  * dB 
  177.  */
  178. #define dB2rap(dB) ((exp((dB)*LOG_10/20.0)))
  179. #define rap2dB(rap) ((20*log(rap)/LOG_10))
  180.  
  181. /*
  182.  * The random generator (0.0..1.0)
  183.  */
  184. #define RND (rand()/(RAND_MAX+1.0))
  185.  
  186. #define ZERO(data,size) {char *data_=(char *) data;for (int i=0;i<size;i++) data_[i]=0;};
  187.  
  188. enum ONOFFTYPE{OFF=0,ON=1};
  189.  
  190. enum MidiControllers{C_NULL=0,C_pitchwheel=1000,C_expression=11,C_panning=10,
  191.     C_filtercutoff=74,C_filterq=71,C_bandwidth=75,C_modwheel=1,C_fmamp=76,
  192.     C_volume=7,C_sustain=64,C_allnotesoff=123,C_allsoundsoff=120,C_resetallcontrollers=121,
  193.     C_portamento=65,C_resonance_center=77,C_resonance_bandwidth=78,
  194.  
  195.     C_dataentryhi=0x06,C_dataentrylo=0x26,C_nrpnhi=99,C_nrpnlo=98};
  196.  
  197.  
  198. //is like i=(int)(floor(f))
  199. #ifdef ASM_F2I_YES
  200. #define F2I(f,i) __asm__ __volatile__ ("fistpl %0" : "=m" (i) : "t" (f-0.49999999) : "st") ;
  201. #else
  202. #define F2I(f,i) (i)=((f>0) ? ( (int)(f) ) :( (int)(f-1.0) ));
  203. #endif
  204.  
  205.  
  206.  
  207. #ifndef  O_BINARY
  208. #define O_BINARY 0 
  209. #endif
  210.  
  211. #endif
  212.  
  213.